package com.xyj.week04;

import java.util.Arrays;

/**
 * @author GuXiaoYao
 * @version 1.0.0
 * @since 2021/9/6
 */
public class T1 {

    /**
     * solution1 N*logN
     * @param nums 数组
     * @return 三个数的乘积
     */
    public int maximumProduct(int[] nums) {
        //排序
        Arrays.sort(nums);
        int len=nums.length;
        //只有两种情况可能最大值，三个最大正数  或者两个最小的负数和一个最大的正数
        return Math.max(nums[0]*nums[1]*nums[len-1],nums[len-1]*nums[len-2]*nums[len-3]);
    }

    /**
     * solution2 三个数最大乘积 ON
     * @param nums 数组
     * @return 最大值
     */
    public int maximumProduct2(int[] nums) {
        //一次遍历，找到五个值
        int min1=Integer.MAX_VALUE,  min2=Integer.MAX_VALUE;
        int max1=Integer.MIN_VALUE, max2=Integer.MIN_VALUE,max3=Integer.MIN_VALUE;
        for(int x:nums){
            if(x<min1){
                min2=min1;
                min1=x;
            }else if(x<min2){
                min2=x;
            }
            if(x>max1){
                max3=max2;
                max2=max1;
                max1=x;
            }else if(x>max2){
                max3=max2;
                max2=x;
            }else if (x>max3){
                max3=x;
            }
        }
        return Math.max(min1*min2*max1,max1*max2*max3);
    }
}
